本篇介绍dSPACE程序设计的一些基本方法、思维与技巧。
本部分在Task1 - 关节角度指示器
的基础上进行讲解。
Task 1 - 关节角度指示器
- dSPACE连接磁编码器和RGB模块,磁编码器的V G S分别连接DIO1的ch5-ch7,RGB的信号线连接DIO1的ch29-ch31;
- 当踝关节角度在-15deg到15deg之间,RGB模块亮绿灯;
- 当踝关节的角度由-15deg减小到-25deg,或由15deg增加到25deg,RBG模块由绿灯渐变为红灯;
- 当踝关节角度小于-25deg或大于25deg,RGB模块红灯闪烁;

1 - 使用局部寄存变量
实现功能:通过点击按钮,对磁编码器测量到的踝关节角度进行校准;
⭐ dSPACE中Simulink模型的执行过程(1)
dSPACE运行时Simulink的主要模块每隔一固定时间会被全部执行一次;Matlab Function中直接定义的变量均为局部变量,每个周期执行完之后都会被释放掉,没有记忆性;
实现变量寄存的两种方式
- 1 - 寄存器(延时模块)

- 2- 局部寄存变量(persistent & 初始化)

2 - 模块化与参数化
- 低耦合,高内聚 - 将复杂函数功能模块化、功能化
- 使用SubSystem对功能化模块进行封装
- 使用Mask对模块参数进行封装

💡 参数的作用域
- 通过Mask定义的参数仅在其内部所有模块和子模块中起作用;
- 在Simulink的Model Properties → Callbacks → InitFcn*下定义的参数可在全局调用;
- 参数可以在子系统中按名称进行传递;

3 - 状态机
实现功能:当关节角度超过最大角度时,RGB保持红灯闪烁,直到上位机点击按钮清除该错误状态;
if-else
→ 系统状态、状态转移条件、状态执行动作

- 外骨骼的控制系统需要在静止、校准以及不同辅助模式下切换,都需要通过状态机来实现
4 - 使用全局寄存变量
实现功能:当系统清除错误状态时,同时清空踝关节角度的校准偏置(
angle_bias=0
)
- 错误形式

⭐ dSPACE中Simulink模型的执行过程(2)
在每隔控制周期,dSPACE按照信号流向,从首至尾顺序执行;禁止存在环路信号
- 方法 1 - 使用单位延迟

方法 2 - 使用全局寄存变量
Step 1 创建 - 创建并设置全局变量,设置变量的维度和初值
Step 2 调用 - 在Matlab Function中通过
global
调用全局变量,并在Port and Data Manger中进行声明Step 3 检查 - 正确调用后,寄存器模块内会列出所有调用该变量的模块